package main

import "fmt"

/*
1、注意事项
(1)channel中只能存放指定的数据类型
(2)channel的数据放满后，就不能再放入了
(3)如果从channel取出数据后，可以继续放入
(4)在没有使用协程的情况下，如果channel数据取完了，再取，就会报dead lock
*/
type Cat struct {
	Name string
	Age  int
}

func main() {
	//定义一个存放任意数据类型的管道，3个数据
	allChan := make(chan interface{}, 3)
	allChan <- 10
	allChan <- "tom jack"
	cat := Cat{"小花猫", 4}
	allChan <- cat
	//我们希望获得到管道中的第三个元素，则先将前2个推出
	<-allChan
	<-allChan
	newCat := <-allChan //从管道中取出的Cat是什么?
	fmt.Printf("newCat=%T,newCat=%v\n", newCat, newCat)
	//下面的写法是错误的！编译不通过
	// fmt.Printf("newCat.Name=%v\n", newCat.Name)
	//使用类型断言
	a := newCat.(Cat)
	fmt.Printf("newCat.Name=%v\n", a.Name)
}
